import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import '../../../common/services/index.dart';
import '../../../common/mixins/index.dart';

/// 实名认证页面控制器
/// 
/// 🎯 核心职责：
/// - 展示用户实名认证状态
/// - 处理实名认证表单提交
/// - 通过UserService统一管理实名认证API调用
/// 
/// 遵循GetX控制器标准化结构
class VerifyController extends GetxController with UserProfileMixin {
  // 1. 静态常量
  static const String tag = 'VerifyController';
  
  // 2. 响应式变量
  var isLoading = false.obs;              // 加载状态
  var isSubmitting = false.obs;           // 提交状态
  var hasError = false.obs;               // 错误状态
  var errorMessage = ''.obs;              // 错误信息
  
  // 表单字段
  var realName = ''.obs;                  // 真实姓名
  var idCardNo = ''.obs;                  // 身份证号
  
  // 3. 普通变量
  bool _isInitialized = false;
  
  // 4. 控制器和服务依赖
  UserService get _userService => Get.find<UserService>();
  
  // TextEditingController for form fields
  final TextEditingController realNameController = TextEditingController();
  final TextEditingController idCardNoController = TextEditingController();
  
  // 5. Getter - 认证状态信息（来自UserProfileMixin）
  
  /// 是否已认证（来自Mixin）
  // bool get isVerified => isRealNameVerified;
  
  /// 认证详细信息（来自Mixin）
  // Map<String, dynamic>? get authInfo => realNameAuth;
  
  /// 认证状态文本
  String get verifyStatusText {
    if (!isLoggedIn) return '未登录';
    if (isRealNameVerified) return '已认证';
    
    final authStatus = realNameAuth?['authStatus'] as int?;
    if (authStatus == 1) return '审核中';
    
    return '未认证';
  }
  
  /// 认证状态颜色
  Color get verifyStatusColor {
    if (!isLoggedIn) return Colors.grey;
    if (isRealNameVerified) return Colors.green;
    
    final authStatus = realNameAuth?['authStatus'] as int?;
    if (authStatus == 1) return Colors.orange;
    
    return Colors.grey;
  }
  
  /// 真实姓名（已认证时显示）
  String get verifiedName {
    if (!isRealNameVerified) return '';
    return realNameAuth?['name']?.toString() ?? '';
  }
  
  /// 脱敏身份证号（已认证时显示）
  String get verifiedIdCard {
    if (!isRealNameVerified) return '';
    return realNameAuth?['idCardNo']?.toString() ?? '';
  }
  
  /// 认证时间（已认证时显示）
  String get verifiedTime {
    if (!isRealNameVerified) return '';
    final authTime = realNameAuth?['authTime']?.toString() ?? '';
    if (authTime.isEmpty) return '';
    
    try {
      final dateTime = DateTime.parse(authTime);
      return '${dateTime.year}-${dateTime.month.toString().padLeft(2, '0')}-${dateTime.day.toString().padLeft(2, '0')} ${dateTime.hour.toString().padLeft(2, '0')}:${dateTime.minute.toString().padLeft(2, '0')}';
    } catch (e) {
      return authTime;
    }
  }
  
  // 6. 构造函数
  VerifyController() {
    debugPrint('$tag: Constructor - 控制器已创建');
  }
  
  // 7. 私有初始化方法
  void _initData() {
    debugPrint('$tag: 初始化实名认证页面数据');
    
    if (!_isInitialized) {
      // 检查登录状态
      _checkLoginStatus();
      
      // 设置UserService响应式监听
      _setupUserServiceListeners();
      
      _isInitialized = true;
      debugPrint('$tag: 页面数据初始化完成');
    }
    
    update(["verify"]);
  }
  
  /// 检查登录状态
  void _checkLoginStatus() {
    if (!isLoggedIn) {
      debugPrint('$tag: 用户未登录');
      // 可以选择跳转到登录页
      // Get.offAllNamed(RouteNames.systemLogin);
    } else {
      debugPrint('$tag: 用户已登录，认证状态: $verifyStatusText');
    }
  }
  
  /// 设置UserService响应式监听
  void _setupUserServiceListeners() {
    debugPrint('$tag: 设置UserService响应式数据监听');
    
    // 监听用户信息变化
    ever(_userService.currentUserProfileRx, (userProfile) {
      debugPrint('$tag: UserService用户信息发生变化，更新UI');
      update(["verify"]);
    });
    
    debugPrint('$tag: ✅ 响应式监听器设置完成');
  }
  
  // 8. 业务方法
  
  /// 提交实名认证
  Future<void> submitVerify() async {
    try {
      debugPrint('$tag: 开始提交实名认证');
      
      // 验证表单
      if (!_validateForm()) {
        return;
      }
      
      isSubmitting.value = true;
      hasError.value = false;
      update(["verify"]);
      
      // 🔥 通过UserService统一提交实名认证
      final result = await _userService.submitRealnameAuth(
        realName: realName.value.trim(),
        idCardNo: idCardNo.value.trim(),
      );
      
      if (result.success) {
        debugPrint('$tag: ✅ 实名认证提交成功');
        _showSuccessMessage(result.message);
        
        // 延迟返回上一页
        Future.delayed(const Duration(seconds: 2), () {
          if (Get.isRegistered<VerifyController>()) {
            Get.back();
          }
        });
      } else {
        debugPrint('$tag: ❌ 实名认证提交失败: ${result.message}');
        _handleError(result.message);
      }
      
    } catch (e) {
      debugPrint('$tag: ❌ 提交实名认证异常: $e');
      _handleError('提交实名认证失败，请重试');
    } finally {
      isSubmitting.value = false;
      update(["verify"]);
    }
  }
  
  /// 验证表单
  bool _validateForm() {
    // 验证姓名
    if (realName.value.trim().isEmpty) {
      _showErrorMessage('请输入真实姓名');
      return false;
    }
    
    // 验证身份证号
    if (idCardNo.value.trim().isEmpty) {
      _showErrorMessage('请输入身份证号');
      return false;
    }
    
    // 简单验证身份证号格式（18位）
    final idCardReg = RegExp(r'^(\d{15}|\d{18}|\d{17}(\d|X|x))$');
    if (!idCardReg.hasMatch(idCardNo.value.trim())) {
      _showErrorMessage('请输入正确的身份证号码');
      return false;
    }
    
    return true;
  }
  
  /// 姓名输入变化
  void onNameChanged(String value) {
    realName.value = value;
  }
  
  /// 身份证号输入变化
  void onIdCardChanged(String value) {
    idCardNo.value = value;
  }
  
  /// 返回
  void onBack() {
    Get.back();
  }
  
  // ==================== 消息提示方法 ====================
  
  /// 显示成功消息
  void _showSuccessMessage(String message) {
    Get.snackbar(
      '成功',
      message,
      snackPosition: SnackPosition.TOP,
      backgroundColor: Colors.green.withOpacity(0.8),
      colorText: Colors.white,
      duration: const Duration(seconds: 2),
    );
  }
  
  /// 显示错误消息
  void _showErrorMessage(String message) {
    Get.snackbar(
      '错误',
      message,
      snackPosition: SnackPosition.TOP,
      backgroundColor: Colors.red.withOpacity(0.8),
      colorText: Colors.white,
      duration: const Duration(seconds: 3),
    );
  }
  
  /// 处理错误
  void _handleError(String message) {
    hasError.value = true;
    errorMessage.value = message;
    _showErrorMessage(message);
  }
  
  // 9. 生命周期方法
  @override
  void onInit() {
    super.onInit();
    debugPrint('$tag: onInit - 控制器初始化');
  }

  @override
  void onReady() {
    super.onReady();
    debugPrint('$tag: onReady - 页面准备就绪');
    _initData();
  }

  @override
  void onClose() {
    debugPrint('$tag: onClose - 控制器销毁');
    
    // 清理资源
    realNameController.dispose();
    idCardNoController.dispose();
    
    super.onClose();
  }
}
